data_conf = configuration_data()
data_conf.set('BINDIR', path_bindir)
data_conf.set('LIBEXECDIR', path_libexecdir)
data_conf.set('SYSCONFDIR', path_sysconfdir)
data_conf.set('GAMEMODE_PREFIX', path_prefix)
data_conf.set('GAMEMODE_VERSION', meson.project_version())
data_conf.set('GAMEMODE_PRIVILEGED_GROUP', with_privileged_group)

# Pull in the example config
config_example = run_command(
    'cat',
    join_paths(meson.project_source_root(), 'example', 'gamemode.ini'),
    check: true,
).stdout().strip()
data_conf.set('GAMEMODE_EXAMPLE_CONFIG', config_example)

if sd_bus_provider == 'systemd'
    if with_systemd_unit
        # Install systemd user unit
        configure_file(
            input: 'systemd/user/gamemoded.service.in',
            output: 'gamemoded.service',
            configuration: data_conf,
            install_dir: path_systemd_unit_dir,
        )
    endif
    if with_systemd_group
        # Install the sysusers.d file
        configure_file(
          input: 'systemd/sysusers.d/gamemode.conf.in',
          output: 'gamemode.conf',
          configuration: data_conf,
          install_dir: path_systemd_group_dir,
        )
    endif
endif

if with_pam_renicing
  # Install the limits.d configuration file
  configure_file(
      input: 'pam_limits/10-gamemode.conf.in',
      output: '10-gamemode.conf',
      configuration: data_conf,
      install_dir: path_pam_limits_dir,
  )
endif

# Install the D-BUS service file
configure_file(
  input: 'dbus/com.feralinteractive.GameMode.service.in',
  output: 'com.feralinteractive.GameMode.service',
  configuration: data_conf,
  install_dir: path_dbus_service_dir,
)


# Install the Polkit action & rule files for the privileged gamemode group
if with_privileged_group != ''
    configure_file(
        input: 'polkit/actions/com.feralinteractive.GameMode.policy.in',
        output: 'com.feralinteractive.GameMode.policy',
        configuration: data_conf,
        install_dir: path_polkit_action_dir,
    )
    configure_file(
        input: 'polkit/rules.d/gamemode.rules.in',
        output: 'gamemode.rules',
        configuration: data_conf,
        install_dir: path_polkit_rule_dir,
    )
endif

# Install the helper run script and man page
if get_option('default_library') == 'static'
    warning('gamemoderun will not be installed as a shared libgamemodeauto library is required')
else
    install_data(
        files('gamemoderun'),
        install_dir: path_bindir,
        install_mode: 'rwxr-xr-x',
    )

    gamemoderun_manpage = configure_file(
        input: files('gamemoderun.1.in'),
        output: 'gamemoderun.1',
        configuration: data_conf,
    )

    install_man(
        gamemoderun_manpage,
        install_dir: join_paths(path_mandir, 'man1')
    )
endif

# Install script to find processes with gamemode lib in runtime
install_data(
    files('gamemodelist'),
    install_dir: path_bindir,
    install_mode: 'rwxr-xr-x',
)

# Configure and install man pages
gamemoded_manpage = configure_file(
    input: files('gamemoded.8.in'),
    output: 'gamemoded.8',
    configuration: data_conf,
)

install_man(
    gamemoded_manpage,
    install_dir: join_paths(path_mandir, 'man8')
)

gamemodelist_manpage = configure_file(
    input: files('gamemodelist.1.in'),
    output: 'gamemodelist.1',
    configuration: data_conf,
)

install_man(
    gamemodelist_manpage,
    install_dir: join_paths(path_mandir, 'man1')
)

if with_examples
    example_manpage = configure_file(
        input: files('gamemode-simulate-game.1.in'),
        output: 'gamemode-simulate-game.1',
        configuration: data_conf,
    )

    install_man(
        example_manpage,
        install_dir: join_paths(path_mandir, 'man1')
    )
endif

# Install metainfo
metainfo_file = files('io.github.feralinteractive.gamemode.metainfo.xml')

install_data(
    metainfo_file,
    install_dir: path_metainfo,
)

# Validate metainfo
appstreamcli = find_program(
  'appstreamcli',
  required: false
)
if appstreamcli.found()
  test(
    'validate metainfo file',
    appstreamcli,
    args: ['validate', '--no-net', '--pedantic', metainfo_file],
  )
endif
